﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NHibernate;
using NHibernate.Cfg;
using System.Collections.Generic;
using System.Data.Sql;


public partial class MasterPage2 : System.Web.UI.Page
{
    IList<Empleado> listaEmpleados;
    protected PairIdComponent pairId = new PairIdComponent();
    private string m_Titulo;
    protected Propuesta propuesta = new Propuesta();
    static ISession session = NHibernateControl.GetCurrentSession();
    static ITransaction tx = session.BeginTransaction();
    protected Empleado emp = new Empleado();
    protected PropuestaEmpleado propuestaEmpleado = new PropuestaEmpleado();
    protected IEnumerator etr;
    int contador, hashPropuesta, idPropuesta;
    static int posicion;

    protected void Page_Load(object sender, EventArgs e)
    {

        mostrar();
    }
    
    
    public string Titulo
    {
        get
        {
            return m_Titulo;
        }
        set
        {
            m_Titulo = value;
            //this.H1Titulo.InnerText = value;
        }
    }


    /// <summary>
    /// Captura los datos relacionado con la propuesta y los ingresa. 
    /// 
    /// Autor: Equipo # 1
    /// </summary>
    protected void RellenarPropuesta()
    {
        try
        {
            propuesta.ApellidoReceptor = tbApelRec.Text;
            propuesta.CargoReceptor = tbCarRec.Text;
            propuesta.Cliente = tbCliente.Text;
            propuesta.Codigo = tbCodigo.Text;
            propuesta.Fecha = Convert.ToDateTime(tbFecha.Text);
            propuesta.NombreReceptor = tbNomRec.Text;
            propuesta.Titulo = tbTitulo.Text;
            propuesta.Version = Convert.ToDouble(tbVersion.Text);
            hashPropuesta = propuesta.GetHashCode();
            PropuestaControl _propuestaControl = new PropuestaControl();
            _propuestaControl.IngresarPropuesta(propuesta);

            if (!posicion.Equals(-1))
            {
                IngresarPropEmp();
            }
            tx.Commit();
            NHibernateControl.CloseSession();
        }catch(FormatException fe){
            Response.Write("<script language='JavaScript'>alert('Formato de fecha incorrecta');</script>");
            Console.Out.WriteLine(fe.StackTrace);
        }catch(OverflowException oe){
            Response.Write("<script language='JavaScript'>alert('Formato de version incorrecta');</script>");
            Console.Out.WriteLine(oe.StackTrace);
        }catch(Exception e){
          
        }
        
    }


    /// <summary>
    /// Selecciona de la base de datos todos ls empleados y los relaciona a un gridview.
    /// 
    /// Autor: Equipo # 1
    /// </summary>
    protected void mostrar() {
        EmpleadoControl empleadoControl = new EmpleadoControl();
        listaEmpleados = empleadoControl.recolectarEmpleado();
        BoundField ci = new BoundField();
        BoundField nombre = new BoundField();
        BoundField apellido = new BoundField();
        ci.DataField = "Cedula";  
        ci.HeaderText = "CEDULA"; 
        apellido.DataField = "Apellido";
        apellido.HeaderText = "APELLIDO";
        nombre.DataField = "Nombre";
        nombre.HeaderText = "NOMBRE";
        this.GridView1.Columns.Clear();
        this.GridView1.Columns.Add(ci);
        this.GridView1.Columns.Add(nombre);
        this.GridView1.Columns.Add(apellido);
        this.GridView1.DataSource = listaEmpleados;
        this.GridView1.DataBind();

    
    }


    /// <summary>
    /// Manejador de eventos encargado de ingresar una propuesta.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button1_Click(object sender, EventArgs e)
    {
        
        RellenarPropuesta();
        Response.Write("<script language='JavaScript'>alert('La propuesta fue ingresada con exito');</script>");
        
    }

    /// <summary>
    /// Manejador de eventos encargado de capturar la posicion del empleado seleccionado.
    /// 
    /// Autor: Equipo # 1
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        posicion = GridView1.SelectedIndex;
    }


    /// <summary>
    /// Busca el id del empleado selecciona y los relaciona con el id de la propuesta
    /// para luego ingresarlo en la base de datos.
    /// 
    /// Autor: Equipo # 1
    /// </summary>
    protected void IngresarPropEmp() {
        etr = listaEmpleados.GetEnumerator();
        contador = 0;

        while (etr.MoveNext())
        {

            if (posicion.Equals(contador))
            {
                emp = (Empleado)etr.Current;
                pairId.Key1 = emp.Id;
                pairId.Key2 = BuscarIdPropuesta();
                propuestaEmpleado.Id = pairId;
                session.Save(propuestaEmpleado);
                session.Flush();
                break;
            }
            else
            {
                contador++;
                emp = null;
            }
        } 
    }
    /// <summary>
    /// Busca el id de la propuesta a ingresar en el momento.
    /// 
    /// Autor: Equipo # 1
    /// </summary>
    /// <returns> Id de la propuesta : int (numero entero)</returns>
    protected int BuscarIdPropuesta() {
       
            PropuestaControl propuestaControl = new PropuestaControl();
            IList<Propuesta> lista;
            lista = propuestaControl.GetPropuestas;
            IEnumerator iep;
            iep = lista.GetEnumerator();
            Propuesta propuestaAux;
            while (iep.MoveNext())
            {
                propuestaAux = (Propuesta)iep.Current;
                if (propuestaAux.GetHashCode().Equals(hashPropuesta))
                {
                    idPropuesta = propuestaAux.Id;
                    break;
                }

            }
            return idPropuesta;
        
        
    }

}


